/**
 * @lastUpdateBy : 张瀚
 * @description: 用于2021-08版本对接agcloud网关的文件，从接口获取网关集群地址，然后全局拦截所有请求，把没有指定ip的请求分发到网关集群中任意地址，暂用轮询方式。
 */
import { proxy } from "ajax-hook";
//网关地址，需要接口获取
let apiGatewayList = [];

//随机使用config.json里面配置的接口地址请求，直到获取到了网关地址
function reloadGatewayApiList() {
  agcim.net.axiosWraper
    .getData(
      CIM_PROJECT_CONFIG.gatewayApiList[
        Math.floor(Math.random() * CIM_PROJECT_CONFIG.gatewayApiList.length)
      ]
    )
    .then((res) => {
      apiGatewayList = res.data;
      //启用拦截
      proxy({
        //请求发起前进入
        onRequest: (config, handler) => {
          console.log(config, handler);
          let url = config.url;
          //只有没指定地址的才需要代理
          if (url.startsWith("http")) {
            handler.next(config);
            return;
          }
          //从网关列表里面轮流取地址
          let gatewayPath =
            apiGatewayList[Math.floor(Math.random() * apiGatewayList.length)];
          config.url = `${gatewayPath}${url}`;
          handler.next(config);
        },
      });
    })
    .catch((e) => {
      console.log("获取网关地址异常，稍后重试", e);
      setTimeout(() => {
        reloadGatewayApiList();
      }, 100);
    });
}

//等待agcim.net.axiosWraper加载完成再请求
let waitLoad = setInterval(() => {
  if (window.agcim != null) {
    clearInterval(waitLoad);
    reloadGatewayApiList();
  }
}, 100);
